gtkwindow: Don't set an opaque region if the window is app-paintable
authorJasper St. Pierre <jstpierre@mecheye.net>
Sat, 31 Aug 2013 19:52:56 +0000 (15:52 -0400)
committerJasper St. Pierre <jstpierre@mecheye.net>
Sat, 31 Aug 2013 19:53:10 +0000 (15:53 -0400)
This means the background is effectively unused. This fixes bad drawing
errors with cc-rr-labeller and potentially also notify-osd.

gtk/gtkwindow.c

index 97e5e8bc034bf544bbcb241be616b8249e7f2622..7ae25772feb4c9149b25e0477dd1c0d7ed6c13fc 100644 (file)
@@ -6512,17 +6512,24 @@ update_opaque_region (GtkWindow           *window,
                       GtkBorder           *border,
                       const GtkAllocation *allocation)
 {
-  const GdkRGBA *color;
+  GtkWidget *widget = GTK_WIDGET (window);
   cairo_region_t *opaque_region;
   GtkStyleContext *context;
+  gboolean is_opaque = FALSE;
 
-  if (!gtk_widget_get_realized (GTK_WIDGET (window)))
+  if (!gtk_widget_get_realized (widget))
       return;
 
-  context = gtk_widget_get_style_context (GTK_WIDGET (window));
-  color = _gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BACKGROUND_COLOR));
+  context = gtk_widget_get_style_context (widget);
+
+  if (!gtk_widget_get_app_paintable (widget))
+    {
+      const GdkRGBA *color;
+      color = _gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BACKGROUND_COLOR));
+      is_opaque = (color->alpha >= 1.0);
+    }
 
-  if (color->alpha >= 1.0)
+  if (is_opaque)
     {
       cairo_rectangle_int_t rect;
 
@@ -6540,7 +6547,7 @@ update_opaque_region (GtkWindow           *window,
       opaque_region = NULL;
     }
 
-  gdk_window_set_opaque_region (gtk_widget_get_window (GTK_WIDGET (window)), opaque_region);
+  gdk_window_set_opaque_region (gtk_widget_get_window (widget), opaque_region);
 
   cairo_region_destroy (opaque_region);
 }